/*******************************************************
> Copyright (C) 2024 ==IOT== All rights reserved.
> File Name: class_template.cpp
> Author: IOT
> Website:www.slq.org
> Created Time: 2024年10月28日 星期一 15时46分08秒
***************************************************/

#include <iostream>
using namespace std;

template <class T>
class Array{
	T *ptr = nullptr;		// 成员变量ptr,用于指向数组元素空间
	int len;	// 成员变量len, 记录数组元素个数
	
	public:
		Array(int n) : len(n) // 构造函数
		{
			ptr = new T[len];
		}
		~Array() // 析构函数
		{
			delete [] ptr;
		}
		
		void fill(T &val);
		//front(); // 返回第一个元素
		//back();  // 返回最后一个元素
		//void swap(Array &arr); // 交换两个数组类对象的所有元素
		
		T& operator[](int index);  // 成员函数类内声明
};

template <class T>
void Array<T>::fill(T &val)
{
	for (int i = 0;i < len; i++)
		ptr[i] = val;
}

// 类外定义成员函数
template <class T>
T& Array<T>::operator[](int index)
{
	return ptr[index];
}

int main(int argc,const char* argv[])
{
	Array<int > arry_obj(3);	// 通过过传入参数int,由类模板实例化出来模板类
	
	arry_obj[0] = 1;
	arry_obj[1] = 2;
	arry_obj[2] = 3;
	
	cout << arry_obj[0] << endl;
	cout << arry_obj[1] << endl;
	cout << arry_obj[2] << endl;
	//Array<float>
    return 0;
}

